﻿using System;
using System.Collections.Generic;
using System.Linq;
using System.Web;
using System.Web.UI;
using System.Web.UI.WebControls;
using Sireass.Bl;
using Sireass.Bl.Security;

namespace Sireass.Asp.UserControls
{
    public partial class wucDatosInformeGlobal : System.Web.UI.UserControl
    {

        #region Eventos
        public event EventHandler ClickBotonSiguiente; //para el botón radBtnSigObservaciones
        public event EventHandler ClickBotonAtras; //para el botón radBtnAtrasAportacion

        protected void OnClickBotonSiguiente(EventArgs e)
        {
            ClickBotonSiguiente(this, e);
        }

        protected void OnClickBotonAtras(EventArgs e)
        {
            ClickBotonAtras(this, e);
        }

        #endregion
        #region Page
        protected void Page_Load(object sender, EventArgs e)
        {
            lblError.Text = string.Empty;
            lblExito.Text = string.Empty;
        }

        #endregion


        #region Botones


        protected void radBtnSigAportacion_Click(object sender, EventArgs e)
        {
            mvDatosEspecificos.ActiveViewIndex = 1;
        }

        protected void radBtnAtrasActs_Click(object sender, EventArgs e)
        {
            mvDatosEspecificos.ActiveViewIndex = 0;
        }

        protected void radBtnSigObservaciones_Click(object sender, EventArgs e)
        {
            mvDatosEspecificos.ActiveViewIndex = 2;
            //if (radTxtActividades.ReadOnly == true)
            //{
            //    OnClickBotonSiguiente(EventArgs.Empty);
            //}

        }

        protected void radBtnAtrasAportacion_Click(object sender, EventArgs e)
        {
            //if (radTxtActividades.ReadOnly == true)
            //{
            //    OnClickBotonAtras(EventArgs.Empty);
            //}
            mvDatosEspecificos.ActiveViewIndex = 1;
        }

        #endregion

        #region Métodos
        /// <summary>
        /// Establece los controles del formulario en el modo "sólo lectura" para ser
        /// utilizado en la revisión del Informe Global de Actividades
        /// </summary>
        /// <param name="blnLectura">Indica si será de sólo lectura o no</param>
        public void FormularioSoloLectura(bool blnLectura)
        {
            radTxtActividades.ReadOnly = blnLectura;
            lblValidacionActs.Visible = !blnLectura;
            radTxtExtraordinarias.ReadOnly = blnLectura;
            radTxtAportacion.ReadOnly = blnLectura;
            lblValidaAportacion.Visible = !blnLectura;
            radTxtBeneficiados.ReadOnly = blnLectura;
            lblValidaBeneficiados.Visible = !blnLectura;
            radTxtObservaciones.ReadOnly = blnLectura;
                    }

        /// <summary>
        /// Carga los campos con los datos del prestador para poder editarlos.
        /// </summary>
        /// <param name="objPrestador">Nombre del objeto de la clase PrestadorInfo </param>
        /// <returns></returns>
        public Boolean CargaDatosPrestador(PrestadorInfo objPrestador)
        {
            try
            {

                //Prestador
                lblTxtNombre.Text = objPrestador.NombrePrestador;
                lblTxtNoCuenta.Text = objPrestador.NumeroCuenta;
                lblTxtCarrera.Text = objPrestador.Carrera;

                //lblTxtPeriodoPrestacion.Text=objPrestador ////FALTA!!!

                //Programa
                ProgramaCriteria criteriaPrg = new ProgramaCriteria(null, objPrestador.IdEscuela);
                ProgramaInfo objProgInfo = ProgramaInfo.GetProgramaInfo(criteriaPrg);
                lblTxtProgramaClave.Text = objProgInfo.Programa + " - " + objProgInfo.ClavePrograma;
                // lblTxtObjetivoPrograma.Text=objProgInfo.          ////FALTA!!!     

                return true;
            }

            catch
            {
                lblError.Text = "Ocurrió un error al cargar los datos del prestador. Inténtelo de nuevo";
                return false;
            }

        }
        /// <summary>
        /// Consulta los datos del informe global
        /// </summary>
        /// <param name="idPrestador"></param>
        /// <returns></returns>
                
        public Boolean ConsultarInformeGlobal(long idPrestador)
        {
            try
            {
                AsignacionCriteria objAsigCriteria = new AsignacionCriteria(null, idPrestador, null, null, null, null, null, null, null, null, true, null, null);
                AsignacionInfo objAsignacion = AsignacionInfo.GetAsignacionInfo(objAsigCriteria);

                InformeCriteria objInfCriteria = new InformeCriteria(null, objAsignacion.IdAsignacion, null);
                InformeInfo objInformeInfo = InformeInfo.GetInformeInfo(objInfCriteria);
                
                switch (objInformeInfo.IdEstatusInforme)
                {
                   case (byte)Enums.EstatusInforme.Registrado:
                        FormularioSoloLectura(false);
                        lblTxtEstatusInforme.Text = "Registrado";
                        break;
                   case (byte)Enums.EstatusInforme.ObservacionesEncargado:
                         FormularioSoloLectura(false);
                         lblTxtEstatusInforme.Text = "Con Observaciones del Encargado";
                         lblTxtEstatusInforme.CssClass = "cssError";
                        break;
                   case (byte)Enums.EstatusInforme.ObservacionesResponsable:
                        lblTxtEstatusInforme.Text = "Con Observaciones del Responsable";
                        lblTxtEstatusInforme.CssClass = "cssError";
                        FormularioSoloLectura(false); 
                        break;
                   case (byte)Enums.EstatusInforme.Enviado:
                        lblTxtEstatusInforme.Text = "Enviado a Revisión";
                        FormularioSoloLectura(true);
                        break;
                   case (byte)Enums.EstatusInforme.Corregido:
                        lblTxtEstatusInforme.Text = "Corregido";
                        FormularioSoloLectura(true);
                        break;
                   case (byte)Enums.EstatusInforme.ConVoBo:
                        lblTxtEstatusInforme.Text = "Con Vo. Bo.";
                        FormularioSoloLectura(true);
                        break;
                   case (byte)Enums.EstatusInforme.CorregidoPorAutorizar:
                        lblTxtEstatusInforme.Text = "Corregido por Autorizar";
                        FormularioSoloLectura(true);
                        break;
                   case (byte)Enums.EstatusInforme.Autorizado:
                        lblTxtEstatusInforme.Text = "Autorizado";
                        FormularioSoloLectura(true);
                        break;
                    default:
                        FormularioSoloLectura(true);
                        break;
                
                }
                ViewState["vwsIdInforme"] = objInformeInfo.IdInforme;
                radTxtAportacion.Text = objInformeInfo.Aportacion;
                radTxtBeneficiados.Text = objInformeInfo.PoblacionBeneficiada;
                radTxtObservaciones.Text = objInformeInfo.Observaciones;

                //Actividad Informe Ordinaria
                ActividadInformeCriteria objActCriteriaOrd = new ActividadInformeCriteria(null, objInformeInfo.IdInforme, 1);
                ActividadInformeInfo objActInfo = ActividadInformeInfo.GetActividadInformeInfo(objActCriteriaOrd);
                radTxtActividades.Text = objActInfo.Descripcion;
                //Actividad Informe Extraordinaria
                ActividadInformeCriteria objActCriteriaExt = new ActividadInformeCriteria(null, objInformeInfo.IdInforme, 2);
                objActInfo = ActividadInformeInfo.GetActividadInformeInfo(objActCriteriaExt);
                radTxtExtraordinarias.Text = objActInfo.Descripcion;
                
                return true;
            }

            catch
            {
                lblError.Text = "Ocurrió un error al consultar los datos del informe. Inténtelo de nuevo";
                return false;
            }

        }

        /// <summary>
        /// Guarda los datos del informe global de actividades y/o los envía a revisión por parte del encargado
        /// </summary>
        /// <param name="idPrestador">Identificador del prestador</param>
        /// <param name="enviarRevision">Indica si se enviará a revisión (true)</param>
        /// <returns></returns>
        public Boolean GuardarInformeGlobal(long idPrestador, bool enviarRevision)
        {
            try
            {
                AsignacionCriteria objAsigCriteria = new AsignacionCriteria(null, idPrestador, null, null, null, null, null, null, null, null, true, null, null);
                AsignacionInfo objAsignacion = AsignacionInfo.GetAsignacionInfo(objAsigCriteria);
                long idAsignacion = objAsignacion.IdAsignacion;
                byte idEstatusInforme;
                string strMensaje;
                InformeEdit objInforme;
                ActividadInformeEdit objActInforme, objActInformeExt;
                if (ViewState["vwsIdInforme"] != null)
                {
                    objInforme = InformeEdit.GetInformeEdit((long)ViewState["vwsIdInforme"]);

                    //Actividad Informe
                    ActividadInformeCriteria criteriaOrd = new ActividadInformeCriteria(null, (long)ViewState["vwsIdInforme"], 1);
                    ActividadInformeInfo infoOrd = ActividadInformeInfo.GetActividadInformeInfo(criteriaOrd);
                    long idActInforme = infoOrd.IdActividadInforme;
                    objActInforme = ActividadInformeEdit.GetActividadInformeEdit(idActInforme);

                    ActividadInformeCriteria criteriaExt = new ActividadInformeCriteria(null, (long)ViewState["vwsIdInforme"], 2);
                    ActividadInformeInfo infoExt = ActividadInformeInfo.GetActividadInformeInfo(criteriaExt);
                    long idActInformeExt = infoExt.IdActividadInforme;
                    objActInformeExt = ActividadInformeEdit.GetActividadInformeEdit(idActInformeExt);


                }
                else
                {
                    objInforme = InformeEdit.NewInformeEdit();
                    objActInforme = ActividadInformeEdit.NewActividadInformeEdit();
                    objActInformeExt = ActividadInformeEdit.NewActividadInformeEdit();
                }

                if (enviarRevision == true)
                {
                    //Se verifica de qué estado viene para saber a qué estado enviarlo
                    switch (objInforme.IdEstatusInforme)
                    { 
                        case (byte)Enums.EstatusInforme.Registrado:
                            idEstatusInforme =(byte)Enums.EstatusInforme.Enviado; //2 Enviado a revisión
                            break;
                        case (byte)Enums.EstatusInforme.ObservacionesEncargado:
                            idEstatusInforme = (byte)Enums.EstatusInforme.Corregido;
                            break;
                        case (byte)Enums.EstatusInforme.ObservacionesResponsable:
                            idEstatusInforme = (byte)Enums.EstatusInforme.CorregidoPorAutorizar;
                            break;
                        default:
                        idEstatusInforme = (byte)Enums.EstatusInforme.Enviado;
                        break;
                                        }
              
                  strMensaje = "Datos guardados y enviados a revisión correctamente.";
                  
                }
                else
                {
                  idEstatusInforme =(byte)Enums.EstatusInforme.Registrado; //1 Registrado  
                  strMensaje = "Datos guardados correctamente.";
                }
                objInforme.IdAsignacion = idAsignacion;
                objInforme.IdEstatusInforme = idEstatusInforme;
                objInforme.Aportacion = radTxtAportacion.Text;
                objInforme.PoblacionBeneficiada = radTxtBeneficiados.Text;
                objInforme.Observaciones = radTxtObservaciones.Text;
                objInforme.Habilitado = true;

                objActInforme.IdInforme = objInforme.IdInforme;
                objActInforme.Descripcion = radTxtActividades.Text;
                objActInforme.IdTipoActividad = 1; //Ordinaria
                objActInforme.Habilitado = true;

                objActInformeExt.IdInforme = objInforme.IdInforme;
                objActInformeExt.Descripcion = radTxtExtraordinarias.Text;
                objActInformeExt.IdTipoActividad = 2; //ExtraOrdinaria
                objActInformeExt.Habilitado = true;


                InformeUpdater.Update(objInforme, objActInforme, objActInformeExt);

                lblExito.Text = strMensaje;
                return true;
            }

            catch
            {
                lblError.Text = "Ocurrió un error al guardar los datos de informe. Inténtelo de nuevo";
                return false;
            }

        }
        /// <summary>
        /// Retorna el estatus del informe del prestador.
        /// </summary>
        /// <param name="idPrestador">Identificador del prestador</param>
        /// <returns></returns>
        public Byte ObtieneIdEstatusInforme(long idPrestador)
        {
            try
            {
                AsignacionCriteria objAsigCriteria = new AsignacionCriteria(null, idPrestador, null, null, null, null, null, null, null, null, true, null, null);
                AsignacionInfo objAsignacion = AsignacionInfo.GetAsignacionInfo(objAsigCriteria);

                InformeCriteria objInfCriteria = new InformeCriteria(null, objAsignacion.IdAsignacion, null);
                InformeInfo objInformeInfo = InformeInfo.GetInformeInfo(objInfCriteria);
         
                return objInformeInfo.IdEstatusInforme;
                           }

            catch
            {
                return 0;
            }
        
        }
        #endregion

    }
}